/*
 * FaceCat图形通讯框架
 * 著作权编号:2015SR229355+2020SR0266727
 * 上海卷卷猫信息技术有限公司
 */

#ifdef __FCGRIDCELLEXTENDS_H__
#else                                                                            
#define __FCGRIDCELLEXTENDS_H__
#endif
#pragma once
#include "../../stdafx.h"
#include "FCGridCell.h"
#include "FCGridColumn.h"
#include "FCGridRow.h"
#include "FCGrid.h"

namespace FaceCat{
	class FCGridCell;
	class FCGridColumn;
	class FCGridRow;
	class FCGrid;
	class FCButton;
	class FCCheckBox;
	class FCComboBox;
	class FCDateTimePicker;
	class FCLabel;
	class FCSpin;
	class FCRadioButton;
	class FCTextBox;

	/*
	* 布尔型单元格
	*/
    class FCGridBoolCell : public FCGridCell{
	public:
	    /**
		 * 数值
		 */
		bool m_value;
	public:
		/**
		* 创建单元格
		*/
		FCGridBoolCell();
		/**
		* 创建单元格
		*/
		FCGridBoolCell(bool value);
		/**
		* 析构函数
		*/
		virtual ~FCGridBoolCell();
	public:
	    /**
		 * 单元格大小比较，用于排序
		 */
		virtual int compareTo(FCGridCell *cell);
		/**
		 * 获取布尔型数值
		 */
		virtual bool getBool();
		/**
		 * 获取双精度浮点值
		 */
		virtual double getDouble();
		/**
		 * 获取单精度浮点值
		 */
		virtual float getFloat();
		/**
		 * 获取整型数值
		 */
		virtual int getInt();
		/**
		 * 获取长整型数值
		 */
		virtual Long getLong();
		/**
		 * 获取字符型数值
		 */
		virtual String getString();
		/**
		 * 设置布尔型数值
		 */
	    virtual void setBool(bool value);
	    /**
		 * 设置双精度浮点值
		 */
        virtual void setDouble(double value);
        /**
		 * 设置单精度浮点值
		 */
        virtual void setFloat(float value);
        /**
		 * 设置整型数值
		 */
        virtual void setInt(int value);
        /**
		 * 设置长整型数值
		 */
        virtual void setLong(Long value);
        /**
		 * 设置字符型数值
		 */
        virtual void setString(const String& value);
	};

	/*
	* 按钮型单元格
	*/
    class FCGridButtonCell: public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridButtonCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridButtonCell();
		/**
		* 获取按钮
		*/
		FCButton* getButton();
	};

	/*
	* 复选框型单元格
	*/
    class FCGridCheckBoxCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridCheckBoxCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridCheckBoxCell();
		/**
		* 获取复选框
		*/
		FCCheckBox* getCheckBox();
	public:
	    /**
		 * 获取布尔型数值
		 */
		virtual bool getBool();
		/**
		 * 获取双精度浮点值
		 */
		virtual double getDouble();
		/**
		 * 获取单精度浮点值
		 */
		virtual float getFloat();
		/**
		 * 获取整型数值
		 */
		virtual int getInt();
		/**
		 * 获取长整型数值
		 */
		virtual Long getLong();
		/**
		 * 获取布尔型数值
		 */
		virtual String getString();
		/**
		 * 设置布尔型数值
		 */
		virtual void setBool(bool value);
		/**
		 * 设置双精度浮点值
		 */
		virtual void setDouble(double value);
		/**
		 * 设置单精度浮点值
		 */
        virtual void setFloat(float value);
        /**
		 * 设置整型数值
		 */
        virtual void setInt(int value);
        /**
		 * 设置长整型数值
		 */
        virtual void setLong(Long value);
        /**
		 * 设置字符型数值
		 */
        virtual void setString(const String& value);
	};

	/*
	* 下拉列表单元格
	*/
    class FCGridComboBoxCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridComboBoxCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridComboBoxCell();
		/**
		* 获取下拉列表
		*/
		FCComboBox* getComboBox();
	public:
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取布尔型数值
		*/
		virtual String getString();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 日期时间选择单元格
	*/
    class FCGridDateTimePickerCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridDateTimePickerCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridDateTimePickerCell();
		/**
		* 获取日期时间选择
		*/
		FCDateTimePicker* getDatePicker();
	};

	/*
	* 图层单元格
	*/
    class FCGridDivCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridDivCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridDivCell();
		/**
		* 获取图层
		*/
		FCDiv* getDiv();
	};

	/*
	* 双精度单元格
	*/
    class FCGridDoubleCell : public FCGridCell{
	public:
		int m_digit;
		double m_value;
	public:
		/**
		* 构造函数
		*/
		FCGridDoubleCell();
		/**
		* 构造函数
		*/
		FCGridDoubleCell(double value);
		/**
		* 析构函数
		*/
		virtual ~FCGridDoubleCell();
		/**
		* 获取精度
		*/
		virtual int getDigit();
		/**
		* 设置精度
		*/
		virtual void setDigit(int value);
	public:
		/*
		* 比较大小
		*/
		virtual int compareTo(FCGridCell* cell);
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 获取绘图文本
		*/
		virtual String getPaintText();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 单精度单元格
	*/
    class FCGridFloatCell : public FCGridCell{
	public:
		float m_value;
	public:
		/**
		* 构造函数
		*/
		FCGridFloatCell();
		/**
		* 构造函数
		*/
		FCGridFloatCell(float value);
		/**
		* 析构函数
		*/
		virtual ~FCGridFloatCell();
	public:
		/*
		* 比较大小
		*/
		virtual int compareTo(FCGridCell* cell);
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 整型单元格
	*/
    class FCGridIntCell : public FCGridCell{
	public:
		int m_value;
	public:
		/**
		* 构造函数
		*/
		FCGridIntCell();
		/**
		* 构造函数
		*/
		FCGridIntCell(int value);
		/**
		* 析构函数
		*/
		virtual ~FCGridIntCell();
	public:
		/*
		* 比较大小
		*/
		virtual int compareTo(FCGridCell* cell);
		/**
			* 获取布尔型数值
			*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 标签单元格
	*/
    class FCGridLabelCell : public FCGridViewCell{
	public:
		/*
		* 构造函数
		*/
		FCGridLabelCell();
		/*
		* 析构函数
		*/
		virtual ~FCGridLabelCell();
		/*
		* 获取标签
		*/
		FCLabel* getLabel();
	};

	/*
	* 长整型单元格
	*/
    class FCGridLongCell : public FCGridCell{
	public:
		Long m_value;
	public:
		/**
		* 构造函数
		*/
		FCGridLongCell();
		/**
		* 构造函数
		*/
		FCGridLongCell(Long value);
		/**
		* 析构函数
		*/
		virtual ~FCGridLongCell();
	public:
		/*
		* 比较大小
		*/
		virtual int compareTo(FCGridCell* cell);
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 单选框单元格
	*/
    class FCGridRadioButtonCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridRadioButtonCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridRadioButtonCell();
		/**
		* 获取复选按钮
		*/
		FCRadioButton* getRadioButton();
	public:
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 数值文本框单元格
	*/
    class FCGridSpinCell : public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridSpinCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridSpinCell();
		/**
		* 获取数值文本
		*/
		FCSpin* getSpin();
	public:
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 设置布尔型数值
		*/
		virtual void setBool(bool value);
		/**
		* 设置双精度浮点值
		*/
		virtual void setDouble(double value);
		/**
		* 设置单精度浮点值
		*/
		virtual void setFloat(float value);
		/**
		* 设置整型数值
		*/
		virtual void setInt(int value);
		/**
		* 设置长整型数值
		*/
		virtual void setLong(Long value);
	};

	/*
	* 字符串单元格
	*/
    class FCGridStringCell : public FCGridCell{
	public:
		String m_value;
	public:
		/**
		* 构造函数
		*/
		FCGridStringCell();
		/**
		* 构造函数
		*/
		FCGridStringCell(const String& value);
		/**
		* 析构函数
		*/
		virtual ~FCGridStringCell();
	public:
		/*
		* 比较大小
		*/
		virtual int compareTo(FCGridCell* cell);
		/**
		* 获取布尔型数值
		*/
		virtual bool getBool();
		/**
		* 获取双精度浮点值
		*/
		virtual double getDouble();
		/**
		* 获取单精度浮点值
		*/
		virtual float getFloat();
		/**
		* 获取整型数值
		*/
		virtual int getInt();
		/**
		* 获取长整型数值
		*/
		virtual Long getLong();
		/**
		* 获取字符串
		*/
		virtual String getString();
		/**
		* 设置字符型数值
		*/
		virtual void setString(const String& value);
	};

	/*
	* 密码单元格
	*/
    class FCGridPasswordCell : public FCGridStringCell{
	public:
		/**
		* 构造函数
		*/
		FCGridPasswordCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridPasswordCell();
	public:
		/**
		* 获取绘图文本
		*/
		virtual String getPaintText();
	};

	/*
	* 文本框单元格
	*/
    class FCGridTextBoxCell: public FCGridViewCell{
	public:
		/**
		* 构造函数
		*/
		FCGridTextBoxCell();
		/**
		* 析构函数
		*/
		virtual ~FCGridTextBoxCell();
		/**
		* 获取文本框
		*/
		FCTextBox* getTextBox();
	};

	/*
	* 小数点型文本框
	*/
    class FCGridPercentCell : public FCGridDoubleCell{
	public:
		/*
		* 构造函数
		*/
		FCGridPercentCell();
		/*
		* 构造函数
		*/
		FCGridPercentCell(double value);
	public:
		/*
		* 获取绘图文本
		*/
		virtual String getPaintText();
	};
}
